{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 题目：\n",
    "采用xgboost模型完成商品分类（需进行参数调优）。\n",
    "\n",
    "解题提示\n",
    "为减轻大家对特征工程的入手难度，以及统一标准，数据请用课程网站提供的特征工程编码后的数据\n",
    "（RentListingInquries_FE_train.csv）或稀疏编码的形式（RentListingInquries_FE_train.bin）。\n",
    "xgboost既可以单独调用，也可以在sklearn框架下调用。大家可以随意选择。若采用xgboost单独调用\n",
    "使用方式，建议读取稀疏格式文件。\n",
    "\n",
    "批改标准\n",
    "独立调用xgboost或在sklearn框架下调用均可。\n",
    "1. 模型训练：超参数调优\n",
    "a) 初步确定弱学习器数目： 20分\n",
    "b) 对树的最大深度（可选）和min_children_weight进行调优（可选）：20分\n",
    "c) 对正则参数进行调优：20分\n",
    "d) 重新调整弱学习器数目：10分\n",
    "e) 行列重采样参数调整：10分\n",
    "2. 调用模型进行测试10分\n",
    "3. 生成测试结果文件10分"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 首先 import 必要的模块"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "from xgboost import XGBClassifier\n",
    "import xgboost as xgb\n",
    "\n",
    "import pandas as pd \n",
    "import numpy as np\n",
    "\n",
    "from sklearn.model_selection import GridSearchCV\n",
    "from sklearn.model_selection import StratifiedKFold\n",
    "\n",
    "from sklearn.metrics import log_loss\n",
    "\n",
    "from matplotlib import pyplot\n",
    "import seaborn as sns\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 读取数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>bathrooms</th>\n",
       "      <th>bedrooms</th>\n",
       "      <th>price</th>\n",
       "      <th>price_bathrooms</th>\n",
       "      <th>price_bedrooms</th>\n",
       "      <th>room_diff</th>\n",
       "      <th>room_num</th>\n",
       "      <th>Year</th>\n",
       "      <th>Month</th>\n",
       "      <th>Day</th>\n",
       "      <th>...</th>\n",
       "      <th>walk</th>\n",
       "      <th>walls</th>\n",
       "      <th>war</th>\n",
       "      <th>washer</th>\n",
       "      <th>water</th>\n",
       "      <th>wheelchair</th>\n",
       "      <th>wifi</th>\n",
       "      <th>windows</th>\n",
       "      <th>work</th>\n",
       "      <th>interest_level</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1.5</td>\n",
       "      <td>3</td>\n",
       "      <td>3000</td>\n",
       "      <td>1200.0</td>\n",
       "      <td>750.000000</td>\n",
       "      <td>-1.5</td>\n",
       "      <td>4.5</td>\n",
       "      <td>2016</td>\n",
       "      <td>6</td>\n",
       "      <td>24</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1.0</td>\n",
       "      <td>2</td>\n",
       "      <td>5465</td>\n",
       "      <td>2732.5</td>\n",
       "      <td>1821.666667</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>6</td>\n",
       "      <td>12</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>2850</td>\n",
       "      <td>1425.0</td>\n",
       "      <td>1425.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>4</td>\n",
       "      <td>17</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>3275</td>\n",
       "      <td>1637.5</td>\n",
       "      <td>1637.500000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>4</td>\n",
       "      <td>18</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1.0</td>\n",
       "      <td>4</td>\n",
       "      <td>3350</td>\n",
       "      <td>1675.0</td>\n",
       "      <td>670.000000</td>\n",
       "      <td>-3.0</td>\n",
       "      <td>5.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>4</td>\n",
       "      <td>28</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 228 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   bathrooms  bedrooms  price  price_bathrooms  price_bedrooms  room_diff  \\\n",
       "0        1.5         3   3000           1200.0      750.000000       -1.5   \n",
       "1        1.0         2   5465           2732.5     1821.666667       -1.0   \n",
       "2        1.0         1   2850           1425.0     1425.000000        0.0   \n",
       "3        1.0         1   3275           1637.5     1637.500000        0.0   \n",
       "4        1.0         4   3350           1675.0      670.000000       -3.0   \n",
       "\n",
       "   room_num  Year  Month  Day       ...        walk  walls  war  washer  \\\n",
       "0       4.5  2016      6   24       ...           0      0    0       0   \n",
       "1       3.0  2016      6   12       ...           0      0    0       0   \n",
       "2       2.0  2016      4   17       ...           0      0    0       0   \n",
       "3       2.0  2016      4   18       ...           0      0    0       0   \n",
       "4       5.0  2016      4   28       ...           0      0    1       0   \n",
       "\n",
       "   water  wheelchair  wifi  windows  work  interest_level  \n",
       "0      0           0     0        0     0               1  \n",
       "1      0           0     0        0     0               2  \n",
       "2      0           0     0        0     0               0  \n",
       "3      0           0     0        0     0               2  \n",
       "4      0           0     0        0     0               2  \n",
       "\n",
       "[5 rows x 228 columns]"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dpath = './data/'\n",
    "train = pd.read_csv(dpath +\"RentListingInquries_FE_train.csv\")\n",
    "test=pd.read_csv(dpath +\"RentListingInquries_FE_test.csv\")\n",
    "train.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>bathrooms</th>\n",
       "      <th>bedrooms</th>\n",
       "      <th>price</th>\n",
       "      <th>price_bathrooms</th>\n",
       "      <th>price_bedrooms</th>\n",
       "      <th>room_diff</th>\n",
       "      <th>room_num</th>\n",
       "      <th>Year</th>\n",
       "      <th>Month</th>\n",
       "      <th>Day</th>\n",
       "      <th>...</th>\n",
       "      <th>virtual</th>\n",
       "      <th>walk</th>\n",
       "      <th>walls</th>\n",
       "      <th>war</th>\n",
       "      <th>washer</th>\n",
       "      <th>water</th>\n",
       "      <th>wheelchair</th>\n",
       "      <th>wifi</th>\n",
       "      <th>windows</th>\n",
       "      <th>work</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>2950</td>\n",
       "      <td>1475.000000</td>\n",
       "      <td>1475.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>6</td>\n",
       "      <td>11</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1.0</td>\n",
       "      <td>2</td>\n",
       "      <td>2850</td>\n",
       "      <td>1425.000000</td>\n",
       "      <td>950.000000</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>6</td>\n",
       "      <td>24</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>3758</td>\n",
       "      <td>1879.000000</td>\n",
       "      <td>1879.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>6</td>\n",
       "      <td>3</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1.0</td>\n",
       "      <td>2</td>\n",
       "      <td>3300</td>\n",
       "      <td>1650.000000</td>\n",
       "      <td>1100.000000</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>6</td>\n",
       "      <td>11</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2.0</td>\n",
       "      <td>2</td>\n",
       "      <td>4900</td>\n",
       "      <td>1633.333333</td>\n",
       "      <td>1633.333333</td>\n",
       "      <td>0.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>4</td>\n",
       "      <td>12</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 227 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   bathrooms  bedrooms  price  price_bathrooms  price_bedrooms  room_diff  \\\n",
       "0        1.0         1   2950      1475.000000     1475.000000        0.0   \n",
       "1        1.0         2   2850      1425.000000      950.000000       -1.0   \n",
       "2        1.0         1   3758      1879.000000     1879.000000        0.0   \n",
       "3        1.0         2   3300      1650.000000     1100.000000       -1.0   \n",
       "4        2.0         2   4900      1633.333333     1633.333333        0.0   \n",
       "\n",
       "   room_num  Year  Month  Day  ...   virtual  walk  walls  war  washer  water  \\\n",
       "0       2.0  2016      6   11  ...         0     0      0    0       0      0   \n",
       "1       3.0  2016      6   24  ...         0     0      0    1       0      0   \n",
       "2       2.0  2016      6    3  ...         0     0      0    0       0      0   \n",
       "3       3.0  2016      6   11  ...         0     0      0    0       0      0   \n",
       "4       4.0  2016      4   12  ...         0     0      0    1       0      0   \n",
       "\n",
       "   wheelchair  wifi  windows  work  \n",
       "0           0     0        0     0  \n",
       "1           0     0        0     0  \n",
       "2           0     0        0     0  \n",
       "3           1     0        0     0  \n",
       "4           0     0        0     0  \n",
       "\n",
       "[5 rows x 227 columns]"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "test.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Target 分布，看看各类样本分布是否均衡"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "sns.countplot(train.interest_level);\n",
    "pyplot.xlabel('target');\n",
    "pyplot.ylabel('Number of occurrences');"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "每类样本分布不是很均匀，所以交叉验证时考虑各类样本按比例抽取"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 1 模型训练：超参数调优"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 1.1 初步确定弱学习器数目"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "确定X和y"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "y_train = train['interest_level']\n",
    "train = train.drop(['interest_level'], axis=1)\n",
    "X_train = np.array(train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "kfold = StratifiedKFold(n_splits=5, shuffle=True, random_state=3)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "默认参数，此时学习率为0.1，比较大，观察弱分类数目的大致范围\n",
    "（采用默认参数配置，看看模型是过拟合还是欠拟合）"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "#直接调用xgboost内嵌的交叉验证（cv），可对连续的n_estimators参数进行快速交叉验证\n",
    "#而GridSearchCV只能对有限个参数进行交叉验证\n",
    "def modelfit(alg, X_train, y_train, cv_folds=None, early_stopping_rounds=10):\n",
    "    xgb_param = alg.get_xgb_params()\n",
    "    xgb_param['num_class'] = 9\n",
    "    \n",
    "    #直接调用xgboost，而非sklarn的wrapper类\n",
    "    xgtrain = xgb.DMatrix(X_train, label = y_train)\n",
    "        \n",
    "    cvresult = xgb.cv(xgb_param, xgtrain, num_boost_round=alg.get_params()['n_estimators'], folds =cv_folds,\n",
    "             metrics='mlogloss', early_stopping_rounds=early_stopping_rounds)\n",
    "  \n",
    "    cvresult.to_csv('1_nestimators.csv', index_label = 'n_estimators')\n",
    "    \n",
    "    #最佳参数n_estimators\n",
    "    n_estimators = cvresult.shape[0]\n",
    "    \n",
    "    # 采用交叉验证得到的最佳参数n_estimators，训练模型\n",
    "    alg.set_params(n_estimators = n_estimators)\n",
    "    alg.fit(X_train, y_train, eval_metric='mlogloss')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [],
   "source": [
    "#params = {\"objective\": \"multi:softprob\", \"eval_metric\":\"mlogloss\", \"num_class\": 9}\n",
    "xgb1 = XGBClassifier(\n",
    "        learning_rate =0.1,\n",
    "        n_estimators=1000,  #数值大没关系，cv会自动返回合适的n_estimators\n",
    "        max_depth=5,\n",
    "        min_child_weight=1,\n",
    "        gamma=0,\n",
    "        subsample=0.3,\n",
    "        colsample_bytree=0.8,\n",
    "        colsample_bylevel=0.7,\n",
    "        objective= 'multi:softprob',\n",
    "        seed=3)\n",
    "\n",
    "modelfit(xgb1, X_train, y_train, cv_folds = kfold)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "c:\\python36\\lib\\site-packages\\ipykernel_launcher.py:1: FutureWarning: from_csv is deprecated. Please use read_csv(...) instead. Note that some of the default arguments are different, so please refer to the documentation for from_csv when changing your function calls\n",
      "  \"\"\"Entry point for launching an IPython kernel.\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "cvresult = pd.DataFrame.from_csv('1_nestimators.csv')\n",
    "        \n",
    "# plot\n",
    "test_means = cvresult['test-mlogloss-mean']\n",
    "test_stds = cvresult['test-mlogloss-std'] \n",
    "        \n",
    "train_means = cvresult['train-mlogloss-mean']\n",
    "train_stds = cvresult['train-mlogloss-std'] \n",
    "\n",
    "x_axis = range(0, cvresult.shape[0])\n",
    "        \n",
    "pyplot.errorbar(x_axis, test_means, yerr=test_stds ,label='Test')\n",
    "pyplot.errorbar(x_axis, train_means, yerr=train_stds ,label='Train')\n",
    "pyplot.title(\"XGBoost n_estimators vs Log Loss\")\n",
    "pyplot.xlabel( 'n_estimators' )\n",
    "pyplot.ylabel( 'Log Loss' )\n",
    "pyplot.savefig( 'n_estimators4_1.png' )\n",
    "\n",
    "pyplot.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### n_estimators最优值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "233"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "cvresult.shape[0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "c:\\python36\\lib\\site-packages\\ipykernel_launcher.py:1: FutureWarning: from_csv is deprecated. Please use read_csv(...) instead. Note that some of the default arguments are different, so please refer to the documentation for from_csv when changing your function calls\n",
      "  \"\"\"Entry point for launching an IPython kernel.\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 1000x1000 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "cvresult = pd.DataFrame.from_csv('1_nestimators.csv')\n",
    "\n",
    "cvresult = cvresult.iloc[100:]\n",
    "# plot\n",
    "test_means = cvresult['test-mlogloss-mean']\n",
    "test_stds = cvresult['test-mlogloss-std'] \n",
    "        \n",
    "train_means = cvresult['train-mlogloss-mean']\n",
    "train_stds = cvresult['train-mlogloss-std'] \n",
    "\n",
    "x_axis = range(100,cvresult.shape[0]+100)\n",
    "        \n",
    "fig = pyplot.figure(figsize=(10, 10), dpi=100)\n",
    "pyplot.errorbar(x_axis, test_means, yerr=test_stds ,label='Test')\n",
    "pyplot.errorbar(x_axis, train_means, yerr=train_stds ,label='Train')\n",
    "pyplot.title(\"XGBoost n_estimators vs Log Loss\")\n",
    "pyplot.xlabel( 'n_estimators' )\n",
    "pyplot.ylabel( 'Log Loss' )\n",
    "pyplot.savefig( 'n_estimators_detail.png' )\n",
    "\n",
    "pyplot.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 1.2 对树的最大深度max_depth和min_child_weight进行调优"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "第一轮参数调整得到的n_estimators最优值（233），其余参数继续默认值"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "用交叉验证评价模型性能时，用scoring参数定义评价指标。评价指标是越高越好，因此用一些损失函数当评价指标时，需要再加负号，如neg_log_loss，neg_mean_squared_error 详见sklearn文档：http://scikit-learn.org/stable/modules/model_evaluation.html#log-loss"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'max_depth': range(3, 10, 2), 'min_child_weight': range(1, 6, 2)}"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#max_depth 建议3-10， min_child_weight=1／sqrt(ratio_rare_event) =5.5\n",
    "max_depth = range(3,10,2)\n",
    "min_child_weight = range(1,6,2)\n",
    "param_test2_1 = dict(max_depth=max_depth, min_child_weight=min_child_weight)\n",
    "param_test2_1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "c:\\python36\\lib\\site-packages\\sklearn\\model_selection\\_search.py:762: DeprecationWarning: The grid_scores_ attribute was deprecated in version 0.18 in favor of the more elaborate cv_results_ attribute. The grid_scores_ attribute will not be available from 0.20\n",
      "  DeprecationWarning)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "([mean: -0.60116, std: 0.00318, params: {'max_depth': 3, 'min_child_weight': 1},\n",
       "  mean: -0.60154, std: 0.00327, params: {'max_depth': 3, 'min_child_weight': 3},\n",
       "  mean: -0.60147, std: 0.00327, params: {'max_depth': 3, 'min_child_weight': 5},\n",
       "  mean: -0.58861, std: 0.00444, params: {'max_depth': 5, 'min_child_weight': 1},\n",
       "  mean: -0.58938, std: 0.00398, params: {'max_depth': 5, 'min_child_weight': 3},\n",
       "  mean: -0.58911, std: 0.00368, params: {'max_depth': 5, 'min_child_weight': 5},\n",
       "  mean: -0.59014, std: 0.00294, params: {'max_depth': 7, 'min_child_weight': 1},\n",
       "  mean: -0.58962, std: 0.00379, params: {'max_depth': 7, 'min_child_weight': 3},\n",
       "  mean: -0.58889, std: 0.00360, params: {'max_depth': 7, 'min_child_weight': 5},\n",
       "  mean: -0.60418, std: 0.00374, params: {'max_depth': 9, 'min_child_weight': 1},\n",
       "  mean: -0.60048, std: 0.00561, params: {'max_depth': 9, 'min_child_weight': 3},\n",
       "  mean: -0.59624, std: 0.00323, params: {'max_depth': 9, 'min_child_weight': 5}],\n",
       " {'max_depth': 5, 'min_child_weight': 1},\n",
       " -0.5886106073025753)"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "xgb2_1 = XGBClassifier(\n",
    "        learning_rate =0.1,\n",
    "        n_estimators=233,  #第一轮参数调整得到的n_estimators最优值\n",
    "        max_depth=5,\n",
    "        min_child_weight=1,\n",
    "        gamma=0,\n",
    "        subsample=0.3,\n",
    "        colsample_bytree=0.8,\n",
    "        colsample_bylevel = 0.7,\n",
    "        objective= 'multi:softprob',\n",
    "        seed=3)\n",
    "\n",
    "\n",
    "gsearch2_1 = GridSearchCV(xgb2_1, param_grid = param_test2_1, scoring='neg_log_loss',n_jobs=-1, cv=kfold)\n",
    "gsearch2_1.fit(X_train , y_train)\n",
    "\n",
    "gsearch2_1.grid_scores_, gsearch2_1.best_params_,     gsearch2_1.best_score_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "c:\\python36\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split0_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "c:\\python36\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split1_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "c:\\python36\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split2_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "c:\\python36\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split3_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "c:\\python36\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split4_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "c:\\python36\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('mean_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "c:\\python36\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('std_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "{'mean_fit_time': array([ 266.68785381,  269.46601262,  208.8163435 ,  306.08530717,\n",
       "         279.38918023,  271.44792595,  401.41675973, 1062.5812325 ,\n",
       "        2409.62219157,  486.04800043,  469.06142874,  438.95470672]),\n",
       " 'std_fit_time': array([  75.61665791,   74.81726917,    6.82903324,   22.69079669,\n",
       "           8.8055935 ,    8.34107764,   26.11620034, 1365.1867724 ,\n",
       "        1654.54203576,   22.32376125,   21.31387615,   28.66636749]),\n",
       " 'mean_score_time': array([0.81864681, 0.89925146, 0.64323692, 1.04185958, 0.89205089,\n",
       "        0.94105377, 1.87050695, 1.39467983, 1.48548503, 2.6163497 ,\n",
       "        2.14712286, 1.7156981 ]),\n",
       " 'std_score_time': array([0.27268721, 0.25615788, 0.08394139, 0.15463403, 0.03430076,\n",
       "        0.15849577, 0.55017997, 0.19852449, 0.39519731, 0.14261729,\n",
       "        0.10339057, 0.28796484]),\n",
       " 'param_max_depth': masked_array(data=[3, 3, 3, 5, 5, 5, 7, 7, 7, 9, 9, 9],\n",
       "              mask=[False, False, False, False, False, False, False, False,\n",
       "                    False, False, False, False],\n",
       "        fill_value='?',\n",
       "             dtype=object),\n",
       " 'param_min_child_weight': masked_array(data=[1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5],\n",
       "              mask=[False, False, False, False, False, False, False, False,\n",
       "                    False, False, False, False],\n",
       "        fill_value='?',\n",
       "             dtype=object),\n",
       " 'params': [{'max_depth': 3, 'min_child_weight': 1},\n",
       "  {'max_depth': 3, 'min_child_weight': 3},\n",
       "  {'max_depth': 3, 'min_child_weight': 5},\n",
       "  {'max_depth': 5, 'min_child_weight': 1},\n",
       "  {'max_depth': 5, 'min_child_weight': 3},\n",
       "  {'max_depth': 5, 'min_child_weight': 5},\n",
       "  {'max_depth': 7, 'min_child_weight': 1},\n",
       "  {'max_depth': 7, 'min_child_weight': 3},\n",
       "  {'max_depth': 7, 'min_child_weight': 5},\n",
       "  {'max_depth': 9, 'min_child_weight': 1},\n",
       "  {'max_depth': 9, 'min_child_weight': 3},\n",
       "  {'max_depth': 9, 'min_child_weight': 5}],\n",
       " 'split0_test_score': array([-0.59612731, -0.59645803, -0.59639467, -0.58087852, -0.58244573,\n",
       "        -0.58283605, -0.58520583, -0.58366077, -0.58309784, -0.59862108,\n",
       "        -0.59334037, -0.59144068]),\n",
       " 'split1_test_score': array([-0.60026554, -0.59986637, -0.60018117, -0.58667853, -0.58746752,\n",
       "        -0.58788747, -0.58888392, -0.58869879, -0.58728936, -0.60239197,\n",
       "        -0.59591075, -0.59533372]),\n",
       " 'split2_test_score': array([-0.60089487, -0.60163708, -0.60087555, -0.5904    , -0.59163798,\n",
       "        -0.58930842, -0.59111639, -0.59239705, -0.5895194 , -0.60635811,\n",
       "        -0.6018683 , -0.59692629]),\n",
       " 'split3_test_score': array([-0.60585918, -0.60603648, -0.60578779, -0.59182509, -0.59197189,\n",
       "        -0.59257006, -0.59157642, -0.58856397, -0.59062933, -0.60376906,\n",
       "        -0.60172798, -0.59602539]),\n",
       " 'split4_test_score': array([-0.60266831, -0.60372114, -0.6041245 , -0.59327231, -0.59335758,\n",
       "        -0.59297067, -0.59389959, -0.59476634, -0.59390108, -0.60973727,\n",
       "        -0.60954694, -0.60150047]),\n",
       " 'mean_test_score': array([-0.60116295, -0.60154369, -0.60147257, -0.58861061, -0.5893759 ,\n",
       "        -0.5891143 , -0.5901362 , -0.58961707, -0.5888871 , -0.60417516,\n",
       "        -0.60047832, -0.59624499]),\n",
       " 'std_test_score': array([0.00317987, 0.00327458, 0.00326999, 0.00444486, 0.00398445,\n",
       "        0.00368165, 0.00293507, 0.00378601, 0.00359554, 0.00373871,\n",
       "        0.00561304, 0.00322612]),\n",
       " 'rank_test_score': array([ 9, 11, 10,  1,  4,  3,  6,  5,  2, 12,  8,  7]),\n",
       " 'split0_train_score': array([-0.57856054, -0.57979293, -0.57981522, -0.51012125, -0.51729405,\n",
       "        -0.5203566 , -0.40619675, -0.42715198, -0.44135598, -0.28007142,\n",
       "        -0.32539805, -0.3528635 ]),\n",
       " 'split1_train_score': array([-0.57753958, -0.5781815 , -0.57883446, -0.50946577, -0.51533748,\n",
       "        -0.51758403, -0.40378274, -0.42591577, -0.43736835, -0.27683064,\n",
       "        -0.32402512, -0.35273892]),\n",
       " 'split2_train_score': array([-0.57759398, -0.57851149, -0.57813031, -0.50876227, -0.51416047,\n",
       "        -0.51752463, -0.40242214, -0.42352357, -0.43657189, -0.27858168,\n",
       "        -0.32518516, -0.35134204]),\n",
       " 'split3_train_score': array([-0.5767158 , -0.57803566, -0.57857147, -0.50954005, -0.51486098,\n",
       "        -0.51793161, -0.40226071, -0.42415212, -0.43672734, -0.27707624,\n",
       "        -0.32330113, -0.35238065]),\n",
       " 'split4_train_score': array([-0.57550518, -0.57681578, -0.57742369, -0.50707153, -0.51267369,\n",
       "        -0.51617725, -0.40342853, -0.42546315, -0.43931268, -0.28162441,\n",
       "        -0.32762206, -0.35410175]),\n",
       " 'mean_train_score': array([-0.57718302, -0.57826747, -0.57855503, -0.50899217, -0.51486533,\n",
       "        -0.51791482, -0.40361817, -0.42524132, -0.43826725, -0.27883688,\n",
       "        -0.32510631, -0.35268537]),\n",
       " 'std_train_score': array([0.00102245, 0.00095447, 0.00079079, 0.00105271, 0.00151141,\n",
       "        0.00135966, 0.00141317, 0.00128777, 0.00182684, 0.00181573,\n",
       "        0.00147295, 0.00088748])}"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "gsearch2_1.cv_results_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Best: -0.588611 using {'max_depth': 5, 'min_child_weight': 1}\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "c:\\python36\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('mean_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "c:\\python36\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('std_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "c:\\python36\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split0_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "c:\\python36\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split1_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "c:\\python36\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split2_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "c:\\python36\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split3_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "c:\\python36\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split4_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# summarize results\n",
    "print(\"Best: %f using %s\" % (gsearch2_1.best_score_, gsearch2_1.best_params_))\n",
    "test_means = gsearch2_1.cv_results_[ 'mean_test_score' ]\n",
    "test_stds = gsearch2_1.cv_results_[ 'std_test_score' ]\n",
    "train_means = gsearch2_1.cv_results_[ 'mean_train_score' ]\n",
    "train_stds = gsearch2_1.cv_results_[ 'std_train_score' ]\n",
    "\n",
    "pd.DataFrame(gsearch2_1.cv_results_).to_csv('my_preds_maxdepth_min_child_weights_1.csv')\n",
    "\n",
    "# plot results\n",
    "test_scores = np.array(test_means).reshape(len(max_depth), len(min_child_weight))\n",
    "train_scores = np.array(train_means).reshape(len(max_depth), len(min_child_weight))\n",
    "\n",
    "for i, value in enumerate(max_depth):\n",
    "    pyplot.plot(min_child_weight, -test_scores[i], label= 'test_max_depth:'   + str(value))\n",
    "    \n",
    "pyplot.legend()\n",
    "pyplot.xlabel( 'max_depth' )                                                                                                      \n",
    "pyplot.ylabel( 'Log Loss' )\n",
    "pyplot.savefig('max_depth_vs_min_child_weght_1.png' )\n",
    "pyplot.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### max_depth的最优值为5，min_child_weight的最优值为1"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 1.3 正则参数调优"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'reg_alpha': [0.1, 1, 1.5, 2], 'reg_lambda': [0.1, 0.5, 1, 2]}"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#reg_alpha = [1e-3, 1e-2, 0.05, 0.1]    #default = 0\n",
    "#reg_lambda = [1e-3, 1e-2, 0.05, 0.1]   #default = 1\n",
    "\n",
    "reg_alpha = [ 0.1,1,1.5, 2]    #default = 0, 测试0.1,1，1.5，2\n",
    "reg_lambda = [0.1,0.5, 1, 2]      #default = 1，测试0.1， 0.5， 1，2\n",
    "\n",
    "param_test3_1 = dict(reg_alpha=reg_alpha, reg_lambda=reg_lambda)\n",
    "param_test3_1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "c:\\python36\\lib\\site-packages\\sklearn\\model_selection\\_search.py:762: DeprecationWarning: The grid_scores_ attribute was deprecated in version 0.18 in favor of the more elaborate cv_results_ attribute. The grid_scores_ attribute will not be available from 0.20\n",
      "  DeprecationWarning)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "([mean: -0.58452, std: 0.00355, params: {'reg_alpha': 0.1, 'reg_lambda': 0.1},\n",
       "  mean: -0.58484, std: 0.00325, params: {'reg_alpha': 0.1, 'reg_lambda': 0.5},\n",
       "  mean: -0.58488, std: 0.00339, params: {'reg_alpha': 0.1, 'reg_lambda': 1},\n",
       "  mean: -0.58474, std: 0.00326, params: {'reg_alpha': 0.1, 'reg_lambda': 2},\n",
       "  mean: -0.58420, std: 0.00337, params: {'reg_alpha': 1, 'reg_lambda': 0.1},\n",
       "  mean: -0.58420, std: 0.00315, params: {'reg_alpha': 1, 'reg_lambda': 0.5},\n",
       "  mean: -0.58405, std: 0.00331, params: {'reg_alpha': 1, 'reg_lambda': 1},\n",
       "  mean: -0.58446, std: 0.00287, params: {'reg_alpha': 1, 'reg_lambda': 2},\n",
       "  mean: -0.58400, std: 0.00316, params: {'reg_alpha': 1.5, 'reg_lambda': 0.1},\n",
       "  mean: -0.58422, std: 0.00303, params: {'reg_alpha': 1.5, 'reg_lambda': 0.5},\n",
       "  mean: -0.58403, std: 0.00295, params: {'reg_alpha': 1.5, 'reg_lambda': 1},\n",
       "  mean: -0.58464, std: 0.00311, params: {'reg_alpha': 1.5, 'reg_lambda': 2},\n",
       "  mean: -0.58429, std: 0.00336, params: {'reg_alpha': 2, 'reg_lambda': 0.1},\n",
       "  mean: -0.58451, std: 0.00297, params: {'reg_alpha': 2, 'reg_lambda': 0.5},\n",
       "  mean: -0.58439, std: 0.00320, params: {'reg_alpha': 2, 'reg_lambda': 1},\n",
       "  mean: -0.58456, std: 0.00324, params: {'reg_alpha': 2, 'reg_lambda': 2}],\n",
       " {'reg_alpha': 1.5, 'reg_lambda': 0.1},\n",
       " -0.5840020419232841)"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "xgb3_1 = XGBClassifier(\n",
    "        learning_rate =0.1,\n",
    "        n_estimators=233,  #参数调整得到的n_estimators最优值\n",
    "        max_depth=5,    #调优得到的树的最大深度\n",
    "        min_child_weight=1,  #调优得到的min_child_weight\n",
    "        gamma=0,\n",
    "        subsample=0.7,\n",
    "        colsample_bytree=0.6,\n",
    "        colsample_bylevel = 0.7,\n",
    "        objective= 'multi:softprob',\n",
    "        seed=3)\n",
    "\n",
    "\n",
    "gsearch3_1 = GridSearchCV(xgb3_1, param_grid = param_test3_1, scoring='neg_log_loss',n_jobs=-1, cv=kfold)\n",
    "gsearch3_1.fit(X_train , y_train)\n",
    "\n",
    "gsearch3_1.grid_scores_, gsearch3_1.best_params_,     gsearch3_1.best_score_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "c:\\python36\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split0_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "c:\\python36\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split1_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "c:\\python36\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split2_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "c:\\python36\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split3_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "c:\\python36\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split4_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "c:\\python36\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('mean_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "c:\\python36\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('std_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "{'mean_fit_time': array([296.65656781, 299.07750621, 298.4174684 , 287.34103498,\n",
       "        281.23948593, 283.90963869, 287.11702213, 282.3843514 ,\n",
       "        307.48638716, 293.30977631, 293.91321087, 290.86063623,\n",
       "        284.22925696, 281.93852601, 287.63325162, 254.83717594]),\n",
       " 'std_fit_time': array([18.55788509, 21.485802  , 16.27435853, 10.52584786, 11.38845889,\n",
       "         9.943088  , 10.67262848, 12.8673654 , 16.97190746, 15.39194406,\n",
       "        19.8288977 , 13.23616755,  9.16083804, 11.7479386 , 10.38184575,\n",
       "        40.95350392]),\n",
       " 'mean_score_time': array([0.86204934, 0.86284943, 0.87385001, 0.86784964, 0.87024989,\n",
       "        0.87324996, 0.87985044, 0.94525409, 0.94405403, 0.88565068,\n",
       "        0.89545131, 0.89625134, 0.84864855, 0.86484947, 0.91245236,\n",
       "        0.74864278]),\n",
       " 'std_score_time': array([0.03176331, 0.03949602, 0.0491614 , 0.03908875, 0.03548378,\n",
       "        0.02696375, 0.03521218, 0.13044114, 0.07727539, 0.03263684,\n",
       "        0.05929454, 0.01336346, 0.03733093, 0.04644557, 0.05626549,\n",
       "        0.10010884]),\n",
       " 'param_reg_alpha': masked_array(data=[0.1, 0.1, 0.1, 0.1, 1, 1, 1, 1, 1.5, 1.5, 1.5, 1.5, 2,\n",
       "                    2, 2, 2],\n",
       "              mask=[False, False, False, False, False, False, False, False,\n",
       "                    False, False, False, False, False, False, False, False],\n",
       "        fill_value='?',\n",
       "             dtype=object),\n",
       " 'param_reg_lambda': masked_array(data=[0.1, 0.5, 1, 2, 0.1, 0.5, 1, 2, 0.1, 0.5, 1, 2, 0.1,\n",
       "                    0.5, 1, 2],\n",
       "              mask=[False, False, False, False, False, False, False, False,\n",
       "                    False, False, False, False, False, False, False, False],\n",
       "        fill_value='?',\n",
       "             dtype=object),\n",
       " 'params': [{'reg_alpha': 0.1, 'reg_lambda': 0.1},\n",
       "  {'reg_alpha': 0.1, 'reg_lambda': 0.5},\n",
       "  {'reg_alpha': 0.1, 'reg_lambda': 1},\n",
       "  {'reg_alpha': 0.1, 'reg_lambda': 2},\n",
       "  {'reg_alpha': 1, 'reg_lambda': 0.1},\n",
       "  {'reg_alpha': 1, 'reg_lambda': 0.5},\n",
       "  {'reg_alpha': 1, 'reg_lambda': 1},\n",
       "  {'reg_alpha': 1, 'reg_lambda': 2},\n",
       "  {'reg_alpha': 1.5, 'reg_lambda': 0.1},\n",
       "  {'reg_alpha': 1.5, 'reg_lambda': 0.5},\n",
       "  {'reg_alpha': 1.5, 'reg_lambda': 1},\n",
       "  {'reg_alpha': 1.5, 'reg_lambda': 2},\n",
       "  {'reg_alpha': 2, 'reg_lambda': 0.1},\n",
       "  {'reg_alpha': 2, 'reg_lambda': 0.5},\n",
       "  {'reg_alpha': 2, 'reg_lambda': 1},\n",
       "  {'reg_alpha': 2, 'reg_lambda': 2}],\n",
       " 'split0_test_score': array([-0.57815374, -0.57889495, -0.57867695, -0.57871248, -0.57863801,\n",
       "        -0.57854303, -0.57821067, -0.57933898, -0.57837703, -0.57869114,\n",
       "        -0.57888161, -0.57930596, -0.57809683, -0.57914515, -0.5785711 ,\n",
       "        -0.57858617]),\n",
       " 'split1_test_score': array([-0.58380892, -0.58461776, -0.58422753, -0.5842261 , -0.58244702,\n",
       "        -0.58331678, -0.58320617, -0.58377654, -0.5832636 , -0.58358544,\n",
       "        -0.58318934, -0.58300788, -0.5836298 , -0.58353396, -0.58347422,\n",
       "        -0.58385878]),\n",
       " 'split2_test_score': array([-0.58508912, -0.58525033, -0.58588391, -0.58607516, -0.58484825,\n",
       "        -0.58523943, -0.58454768, -0.5851116 , -0.58447289, -0.5852044 ,\n",
       "        -0.58439331, -0.58623551, -0.58576345, -0.58584991, -0.58560316,\n",
       "        -0.58600947]),\n",
       " 'split3_test_score': array([-0.58831837, -0.58718745, -0.58827069, -0.5880954 , -0.58767961,\n",
       "        -0.58750963, -0.58763344, -0.58758952, -0.58724098, -0.5873905 ,\n",
       "        -0.58725059, -0.58728679, -0.58771373, -0.58723926, -0.58710031,\n",
       "        -0.58766405]),\n",
       " 'split4_test_score': array([-0.58721217, -0.58824932, -0.5873553 , -0.5866103 , -0.58740994,\n",
       "        -0.58637534, -0.58666684, -0.58649288, -0.58665652, -0.5862137 ,\n",
       "        -0.58643251, -0.58738758, -0.58623076, -0.58678432, -0.58718925,\n",
       "        -0.58666441]),\n",
       " 'mean_test_score': array([-0.5845163 , -0.58483975, -0.58488273, -0.58474377, -0.58420437,\n",
       "        -0.58419671, -0.5840528 , -0.58446178, -0.58400204, -0.58421691,\n",
       "        -0.58402933, -0.58464458, -0.5842868 , -0.58451038, -0.58438744,\n",
       "        -0.58455645]),\n",
       " 'std_test_score': array([0.00355066, 0.00324638, 0.00339225, 0.00325996, 0.00337166,\n",
       "        0.00314799, 0.00330901, 0.00286511, 0.00316056, 0.00303211,\n",
       "        0.00294923, 0.00310537, 0.00336015, 0.0029716 , 0.00320476,\n",
       "        0.00323557]),\n",
       " 'rank_test_score': array([11, 15, 16, 14,  5,  4,  3,  9,  1,  6,  2, 13,  7, 10,  8, 12]),\n",
       " 'split0_train_score': array([-0.50456553, -0.50621231, -0.50830643, -0.51086075, -0.50813043,\n",
       "        -0.50936556, -0.51103033, -0.51409975, -0.51142742, -0.51227681,\n",
       "        -0.5134737 , -0.51609752, -0.51465515, -0.51580698, -0.51605086,\n",
       "        -0.51814446]),\n",
       " 'split1_train_score': array([-0.50435924, -0.50612023, -0.5080711 , -0.51071068, -0.50692683,\n",
       "        -0.50894355, -0.51058625, -0.51324874, -0.51041569, -0.51140658,\n",
       "        -0.51282865, -0.51470268, -0.5132411 , -0.51447676, -0.51531403,\n",
       "        -0.51745346]),\n",
       " 'split2_train_score': array([-0.50198029, -0.50510334, -0.50721456, -0.51028386, -0.50661505,\n",
       "        -0.50892953, -0.50998246, -0.51243965, -0.50993946, -0.51165497,\n",
       "        -0.5130468 , -0.51471404, -0.51311014, -0.51386672, -0.51510079,\n",
       "        -0.51659247]),\n",
       " 'split3_train_score': array([-0.50416242, -0.50661196, -0.5082583 , -0.51077511, -0.50737163,\n",
       "        -0.50910708, -0.51007708, -0.51292014, -0.51001141, -0.51188793,\n",
       "        -0.5133606 , -0.51563093, -0.51412763, -0.51451005, -0.51571659,\n",
       "        -0.5178451 ]),\n",
       " 'split4_train_score': array([-0.50252583, -0.50466868, -0.50758587, -0.50947875, -0.50588569,\n",
       "        -0.50683423, -0.50904594, -0.51116898, -0.50948776, -0.5094633 ,\n",
       "        -0.51094274, -0.51293501, -0.512027  , -0.5128911 , -0.51320685,\n",
       "        -0.51508504]),\n",
       " 'mean_train_score': array([-0.50351866, -0.5057433 , -0.50788725, -0.51042183, -0.50698593,\n",
       "        -0.50863599, -0.51014441, -0.51277545, -0.51025635, -0.51133792,\n",
       "        -0.5127305 , -0.51481604, -0.51343221, -0.51431032, -0.51507782,\n",
       "        -0.51702411]),\n",
       " 'std_train_score': array([0.00105539, 0.00073225, 0.00042203, 0.00051173, 0.0007497 ,\n",
       "        0.00091447, 0.00066595, 0.00096873, 0.00065543, 0.00098015,\n",
       "        0.00092251, 0.0010833 , 0.00090488, 0.00095063, 0.00099113,\n",
       "        0.00110089])}"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "gsearch3_1.cv_results_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Best: -0.584002 using {'reg_alpha': 1.5, 'reg_lambda': 0.1}\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "c:\\python36\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('mean_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "c:\\python36\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('std_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "c:\\python36\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split0_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "c:\\python36\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split1_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "c:\\python36\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split2_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "c:\\python36\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split3_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "c:\\python36\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split4_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# summarize results\n",
    "print(\"Best: %f using %s\" % (gsearch3_1.best_score_, gsearch3_1.best_params_))\n",
    "test_means = gsearch3_1.cv_results_[ 'mean_test_score' ]\n",
    "test_stds = gsearch3_1.cv_results_[ 'std_test_score' ]\n",
    "train_means = gsearch3_1.cv_results_[ 'mean_train_score' ]\n",
    "train_stds = gsearch3_1.cv_results_[ 'std_train_score' ]\n",
    "\n",
    "pd.DataFrame(gsearch3_1.cv_results_).to_csv('my_preds_reg_alpha_reg_lambda_1.csv')\n",
    "\n",
    "# plot results\n",
    "test_scores = np.array(test_means).reshape(len(reg_alpha), len(reg_lambda))\n",
    "train_scores = np.array(train_means).reshape(len(reg_alpha), len(reg_lambda))\n",
    "\n",
    "#log_reg_alpha = [0,0,0,0]\n",
    "#for index in range(len(reg_alpha)):\n",
    "#   log_reg_alpha[index] = math.log10(reg_alpha[index])\n",
    "    \n",
    "for i, value in enumerate(reg_alpha):\n",
    "    pyplot.plot(reg_lambda, -test_scores[i], label= 'reg_alpha:'   + str(value))\n",
    "#for i, value in enumerate(min_child_weight):\n",
    "#    pyplot.plot(max_depth, train_scores[i], label= 'train_min_child_weight:'   + str(value))\n",
    "    \n",
    "pyplot.legend()\n",
    "pyplot.xlabel( 'reg_alpha' )                                                                                                      \n",
    "pyplot.ylabel( '-Log Loss' )\n",
    "pyplot.savefig( 'reg_alpha_vs_reg_lambda1.png' )"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 1.4 重新调整弱学习器数目"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [],
   "source": [
    "def modelfit(alg, X_train, y_train, useTrainCV=True, cv_folds=None, early_stopping_rounds=23):\n",
    "    \n",
    "    if useTrainCV:\n",
    "        xgb_param = alg.get_xgb_params()\n",
    "        xgb_param['num_class'] = 9\n",
    "        \n",
    "        xgtrain = xgb.DMatrix(X_train, label = y_train)\n",
    "        \n",
    "        cvresult = xgb.cv(xgb_param, xgtrain, num_boost_round=alg.get_params()['n_estimators'], folds =cv_folds,\n",
    "                         metrics='mlogloss', early_stopping_rounds=early_stopping_rounds)\n",
    "        \n",
    "        n_estimators = cvresult.shape[0]\n",
    "        alg.set_params(n_estimators = n_estimators)\n",
    "        \n",
    "        print(cvresult)\n",
    "        #result = pd.DataFrame(cvresult)   #cv缺省返回结果为DataFrame\n",
    "        #result.to_csv('my_preds.csv', index_label = 'n_estimators')\n",
    "        cvresult.to_csv('my_preds4_2_3_699.csv', index_label = 'n_estimators')\n",
    "        \n",
    "        # plot\n",
    "        test_means = cvresult['test-mlogloss-mean']\n",
    "        test_stds = cvresult['test-mlogloss-std'] \n",
    "        \n",
    "        train_means = cvresult['train-mlogloss-mean']\n",
    "        train_stds = cvresult['train-mlogloss-std'] \n",
    "\n",
    "        x_axis = range(0, n_estimators)\n",
    "        pyplot.errorbar(x_axis, test_means, yerr=test_stds ,label='Test')\n",
    "        pyplot.errorbar(x_axis, train_means, yerr=train_stds ,label='Train')\n",
    "        pyplot.title(\"XGBoost n_estimators vs Log Loss\")\n",
    "        pyplot.xlabel( 'n_estimators' )\n",
    "        pyplot.ylabel( 'Log Loss' )\n",
    "        pyplot.savefig( 'n_estimators4_2_3_699.png' )\n",
    "    \n",
    "    #Fit the algorithm on the data\n",
    "    alg.fit(X_train, y_train, eval_metric='mlogloss')\n",
    "        \n",
    "    #Predict training set:\n",
    "    train_predprob = alg.predict_proba(X_train)\n",
    "    logloss = log_loss(y_train, train_predprob)\n",
    "\n",
    "        \n",
    "    #Print model report:\n",
    "    print(\"logloss of train :\" )\n",
    "    print(logloss)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "     train-mlogloss-mean  train-mlogloss-std  test-mlogloss-mean  \\\n",
      "0               1.956063            0.000934            1.956842   \n",
      "1               1.782643            0.000466            1.784199   \n",
      "2               1.646640            0.000942            1.648913   \n",
      "3               1.534743            0.001048            1.537785   \n",
      "4               1.440824            0.001429            1.444560   \n",
      "5               1.360270            0.001107            1.364563   \n",
      "6               1.290122            0.001140            1.294987   \n",
      "7               1.228987            0.001123            1.234314   \n",
      "8               1.174847            0.001180            1.180539   \n",
      "9               1.126523            0.001128            1.132763   \n",
      "10              1.083544            0.001105            1.090277   \n",
      "11              1.044628            0.001162            1.051909   \n",
      "12              1.009843            0.001122            1.017628   \n",
      "13              0.978387            0.001007            0.986601   \n",
      "14              0.950010            0.001139            0.958649   \n",
      "15              0.923882            0.001197            0.932921   \n",
      "16              0.900519            0.001420            0.910006   \n",
      "17              0.879036            0.001401            0.889000   \n",
      "18              0.859396            0.001346            0.869743   \n",
      "19              0.841340            0.001350            0.852130   \n",
      "20              0.824693            0.001385            0.835888   \n",
      "21              0.809572            0.001223            0.821142   \n",
      "22              0.795465            0.001180            0.807355   \n",
      "23              0.782430            0.001216            0.794770   \n",
      "24              0.770219            0.001262            0.783022   \n",
      "25              0.759214            0.001335            0.772492   \n",
      "26              0.748934            0.001108            0.762632   \n",
      "27              0.739308            0.001207            0.753362   \n",
      "28              0.730344            0.001047            0.744786   \n",
      "29              0.721906            0.001139            0.736721   \n",
      "..                   ...                 ...                 ...   \n",
      "203             0.519881            0.000879            0.591130   \n",
      "204             0.519551            0.000896            0.591174   \n",
      "205             0.519202            0.000872            0.591103   \n",
      "206             0.518892            0.000820            0.591094   \n",
      "207             0.518609            0.000831            0.590993   \n",
      "208             0.518291            0.000812            0.590966   \n",
      "209             0.517963            0.000809            0.590946   \n",
      "210             0.517629            0.000804            0.590917   \n",
      "211             0.517327            0.000791            0.590823   \n",
      "212             0.517052            0.000785            0.590795   \n",
      "213             0.516714            0.000795            0.590717   \n",
      "214             0.516398            0.000836            0.590681   \n",
      "215             0.516072            0.000861            0.590693   \n",
      "216             0.515763            0.000848            0.590635   \n",
      "217             0.515491            0.000839            0.590707   \n",
      "218             0.515179            0.000885            0.590660   \n",
      "219             0.514858            0.000919            0.590590   \n",
      "220             0.514557            0.000894            0.590600   \n",
      "221             0.514234            0.000873            0.590592   \n",
      "222             0.513925            0.000874            0.590521   \n",
      "223             0.513599            0.000868            0.590585   \n",
      "224             0.513271            0.000858            0.590536   \n",
      "225             0.512984            0.000845            0.590489   \n",
      "226             0.512714            0.000831            0.590447   \n",
      "227             0.512397            0.000813            0.590376   \n",
      "228             0.512043            0.000824            0.590292   \n",
      "229             0.511764            0.000828            0.590263   \n",
      "230             0.511483            0.000833            0.590194   \n",
      "231             0.511182            0.000816            0.590154   \n",
      "232             0.510878            0.000828            0.590153   \n",
      "\n",
      "     test-mlogloss-std  \n",
      "0             0.000592  \n",
      "1             0.000681  \n",
      "2             0.000736  \n",
      "3             0.000636  \n",
      "4             0.001099  \n",
      "5             0.000937  \n",
      "6             0.000845  \n",
      "7             0.000937  \n",
      "8             0.000988  \n",
      "9             0.001162  \n",
      "10            0.001210  \n",
      "11            0.001267  \n",
      "12            0.001461  \n",
      "13            0.001784  \n",
      "14            0.001884  \n",
      "15            0.001749  \n",
      "16            0.001737  \n",
      "17            0.001821  \n",
      "18            0.001756  \n",
      "19            0.001664  \n",
      "20            0.001806  \n",
      "21            0.002041  \n",
      "22            0.002146  \n",
      "23            0.001890  \n",
      "24            0.001993  \n",
      "25            0.002056  \n",
      "26            0.002172  \n",
      "27            0.002111  \n",
      "28            0.002271  \n",
      "29            0.002181  \n",
      "..                 ...  \n",
      "203           0.002447  \n",
      "204           0.002427  \n",
      "205           0.002464  \n",
      "206           0.002523  \n",
      "207           0.002527  \n",
      "208           0.002542  \n",
      "209           0.002542  \n",
      "210           0.002549  \n",
      "211           0.002609  \n",
      "212           0.002605  \n",
      "213           0.002648  \n",
      "214           0.002639  \n",
      "215           0.002669  \n",
      "216           0.002692  \n",
      "217           0.002637  \n",
      "218           0.002617  \n",
      "219           0.002564  \n",
      "220           0.002522  \n",
      "221           0.002566  \n",
      "222           0.002594  \n",
      "223           0.002555  \n",
      "224           0.002607  \n",
      "225           0.002597  \n",
      "226           0.002605  \n",
      "227           0.002641  \n",
      "228           0.002617  \n",
      "229           0.002611  \n",
      "230           0.002641  \n",
      "231           0.002653  \n",
      "232           0.002676  \n",
      "\n",
      "[233 rows x 4 columns]\n",
      "logloss of train :\n",
      "0.5216933238993015\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "#调整max_depth和min_child_weight之后再次调整n_estimators(6,4)\n",
    "xgb4_1 = XGBClassifier(\n",
    "        learning_rate =0.1,\n",
    "        n_estimators=500,  #数值大没关系，cv会自动返回合适的n_estimators\n",
    "        max_depth=5,   #前面调优得到的参数\n",
    "        min_child_weight=1, #前面调优得到的参数\n",
    "        reg_alpha=1.5,  #前面调优得到的参数\n",
    "        reg_lambda= 0.1, #前面调优得到的参数\n",
    "        subsample=0.3,\n",
    "        colsample_bytree=0.8,\n",
    "        colsample_bylevel=0.7,\n",
    "        objective= 'multi:softprob',\n",
    "        seed=3)\n",
    "\n",
    "modelfit(xgb4_1, X_train, y_train, cv_folds = kfold)\n",
    "#from sklearn.model_selection import cross_val_score\n",
    "#results = cross_val_score(xgb2_3, X_train, y_train, metrics='mlogloss', cv=kfold)\n",
    "#print results\n",
    "#print(\"CV logloss: %.2f%% (%.2f%%)\" % (results.mean()*100, results.std()*100))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "c:\\python36\\lib\\site-packages\\ipykernel_launcher.py:1: FutureWarning: from_csv is deprecated. Please use read_csv(...) instead. Note that some of the default arguments are different, so please refer to the documentation for from_csv when changing your function calls\n",
      "  \"\"\"Entry point for launching an IPython kernel.\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 1000x1000 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "cvresult = pd.DataFrame.from_csv('my_preds4_2_3_699.csv')\n",
    "\n",
    "cvresult = cvresult.iloc[100:]\n",
    "# plot\n",
    "test_means = cvresult['test-mlogloss-mean']\n",
    "test_stds = cvresult['test-mlogloss-std'] \n",
    "        \n",
    "train_means = cvresult['train-mlogloss-mean']\n",
    "train_stds = cvresult['train-mlogloss-std'] \n",
    "\n",
    "x_axis = range(100,cvresult.shape[0]+100)\n",
    "        \n",
    "fig = pyplot.figure(figsize=(10, 10), dpi=100)\n",
    "pyplot.errorbar(x_axis, test_means, yerr=test_stds ,label='Test')\n",
    "pyplot.errorbar(x_axis, train_means, yerr=train_stds ,label='Train')\n",
    "pyplot.title(\"XGBoost n_estimators vs Log Loss\")\n",
    "pyplot.xlabel( 'n_estimators' )\n",
    "pyplot.ylabel( 'Log Loss' )\n",
    "pyplot.savefig( 'n_estimators_detail4_2_3_699.png' )\n",
    "\n",
    "pyplot.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 1.5 行列重采样参数调整"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'subsample': [0.3, 0.4, 0.5, 0.6, 0.7, 0.8],\n",
       " 'colsample_bytree': [0.6, 0.7, 0.8, 0.9]}"
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#max_depth 建议3-10， min_child_weight=1／sqrt(ratio_rare_event) =5.5\n",
    "subsample = [i/10.0 for i in range(3,9)]\n",
    "colsample_bytree = [i/10.0 for i in range(6,10)]\n",
    "param_test5_1 = dict(subsample=subsample, colsample_bytree=colsample_bytree)\n",
    "param_test5_1\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "c:\\python36\\lib\\site-packages\\sklearn\\model_selection\\_search.py:762: DeprecationWarning: The grid_scores_ attribute was deprecated in version 0.18 in favor of the more elaborate cv_results_ attribute. The grid_scores_ attribute will not be available from 0.20\n",
      "  DeprecationWarning)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "([mean: -0.58929, std: 0.00410, params: {'colsample_bytree': 0.6, 'subsample': 0.3},\n",
       "  mean: -0.58694, std: 0.00387, params: {'colsample_bytree': 0.6, 'subsample': 0.4},\n",
       "  mean: -0.58557, std: 0.00308, params: {'colsample_bytree': 0.6, 'subsample': 0.5},\n",
       "  mean: -0.58467, std: 0.00340, params: {'colsample_bytree': 0.6, 'subsample': 0.6},\n",
       "  mean: -0.58400, std: 0.00316, params: {'colsample_bytree': 0.6, 'subsample': 0.7},\n",
       "  mean: -0.58339, std: 0.00272, params: {'colsample_bytree': 0.6, 'subsample': 0.8},\n",
       "  mean: -0.58816, std: 0.00407, params: {'colsample_bytree': 0.7, 'subsample': 0.3},\n",
       "  mean: -0.58628, std: 0.00356, params: {'colsample_bytree': 0.7, 'subsample': 0.4},\n",
       "  mean: -0.58482, std: 0.00366, params: {'colsample_bytree': 0.7, 'subsample': 0.5},\n",
       "  mean: -0.58449, std: 0.00398, params: {'colsample_bytree': 0.7, 'subsample': 0.6},\n",
       "  mean: -0.58379, std: 0.00405, params: {'colsample_bytree': 0.7, 'subsample': 0.7},\n",
       "  mean: -0.58308, std: 0.00401, params: {'colsample_bytree': 0.7, 'subsample': 0.8},\n",
       "  mean: -0.58862, std: 0.00403, params: {'colsample_bytree': 0.8, 'subsample': 0.3},\n",
       "  mean: -0.58656, std: 0.00390, params: {'colsample_bytree': 0.8, 'subsample': 0.4},\n",
       "  mean: -0.58599, std: 0.00441, params: {'colsample_bytree': 0.8, 'subsample': 0.5},\n",
       "  mean: -0.58450, std: 0.00352, params: {'colsample_bytree': 0.8, 'subsample': 0.6},\n",
       "  mean: -0.58362, std: 0.00356, params: {'colsample_bytree': 0.8, 'subsample': 0.7},\n",
       "  mean: -0.58310, std: 0.00316, params: {'colsample_bytree': 0.8, 'subsample': 0.8},\n",
       "  mean: -0.58783, std: 0.00378, params: {'colsample_bytree': 0.9, 'subsample': 0.3},\n",
       "  mean: -0.58575, std: 0.00399, params: {'colsample_bytree': 0.9, 'subsample': 0.4},\n",
       "  mean: -0.58412, std: 0.00391, params: {'colsample_bytree': 0.9, 'subsample': 0.5},\n",
       "  mean: -0.58352, std: 0.00406, params: {'colsample_bytree': 0.9, 'subsample': 0.6},\n",
       "  mean: -0.58362, std: 0.00356, params: {'colsample_bytree': 0.9, 'subsample': 0.7},\n",
       "  mean: -0.58225, std: 0.00332, params: {'colsample_bytree': 0.9, 'subsample': 0.8}],\n",
       " {'colsample_bytree': 0.9, 'subsample': 0.8},\n",
       " -0.5822459394249256)"
      ]
     },
     "execution_count": 27,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "xgb5_1 = XGBClassifier(\n",
    "        learning_rate =0.1,\n",
    "        n_estimators=233,  #第二轮参数调整得到的n_estimators最优值\n",
    "        max_depth=5,  #前面调优得到的参数\n",
    "        min_child_weight=1,  #前面调优得到的参数\n",
    "        reg_alpha=1.5,  #前面调优得到的参数\n",
    "        reg_lambda= 0.1, #前面调优得到的参数\n",
    "        subsample=0.3,\n",
    "        colsample_bytree=0.8,\n",
    "        colsample_bylevel = 0.7,\n",
    "        objective= 'multi:softprob',\n",
    "        seed=3)\n",
    "\n",
    "\n",
    "gsearch5_1 = GridSearchCV(xgb5_1, param_grid = param_test5_1, scoring='neg_log_loss',n_jobs=-1, cv=kfold)\n",
    "gsearch5_1.fit(X_train , y_train)\n",
    "\n",
    "gsearch5_1.grid_scores_, gsearch5_1.best_params_,     gsearch5_1.best_score_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "c:\\python36\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split0_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "c:\\python36\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split1_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "c:\\python36\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split2_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "c:\\python36\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split3_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "c:\\python36\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split4_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "c:\\python36\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('mean_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "c:\\python36\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('std_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "{'mean_fit_time': array([221.12804785, 253.28468704, 277.93929715, 284.09204903,\n",
       "        279.30377536, 282.31854768, 250.31311712, 280.78766022,\n",
       "        311.89803958, 317.37275276, 314.05356288, 321.29357696,\n",
       "        278.14850907, 314.62859573, 346.23640361, 357.81906619,\n",
       "        353.57422328, 361.60148249, 305.50247374, 347.31206508,\n",
       "        386.13248553, 394.93238893, 399.40344458, 380.50776381]),\n",
       " 'std_fit_time': array([10.15880777,  8.72554017, 10.0164827 , 10.20262508, 11.78355039,\n",
       "         9.16079455,  7.37974528, 12.43800231, 11.92468045, 11.06206524,\n",
       "        12.79335191, 13.0368344 , 11.45661956, 12.41542099, 11.70315295,\n",
       "        12.20216179, 15.13453636, 11.9907003 , 10.70628959, 14.66393014,\n",
       "        14.70821674, 14.50599972, 14.84144207, 18.96356228]),\n",
       " 'mean_score_time': array([0.91505232, 0.90405173, 0.88325052, 0.89245105, 0.86164923,\n",
       "        0.88385062, 0.90585179, 0.87384987, 0.89005084, 0.87465005,\n",
       "        0.8670496 , 0.89225101, 0.91985269, 0.86664958, 0.88085036,\n",
       "        0.88665061, 0.88585067, 0.87905016, 0.9108521 , 0.88345065,\n",
       "        0.88865066, 0.86344938, 0.89045086, 0.74404254]),\n",
       " 'std_score_time': array([0.04308384, 0.05844993, 0.04694268, 0.0398248 , 0.05030435,\n",
       "        0.04213749, 0.03977362, 0.04303461, 0.05466939, 0.03371003,\n",
       "        0.04832673, 0.04171287, 0.01340831, 0.05092473, 0.06557628,\n",
       "        0.04341479, 0.03082635, 0.04481762, 0.04468545, 0.04718153,\n",
       "        0.04294703, 0.0384814 , 0.03914094, 0.09348902]),\n",
       " 'param_colsample_bytree': masked_array(data=[0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.7, 0.7, 0.7, 0.7, 0.7,\n",
       "                    0.7, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.9, 0.9, 0.9, 0.9,\n",
       "                    0.9, 0.9],\n",
       "              mask=[False, False, False, False, False, False, False, False,\n",
       "                    False, False, False, False, False, False, False, False,\n",
       "                    False, False, False, False, False, False, False, False],\n",
       "        fill_value='?',\n",
       "             dtype=object),\n",
       " 'param_subsample': masked_array(data=[0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.3, 0.4, 0.5, 0.6, 0.7,\n",
       "                    0.8, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.3, 0.4, 0.5, 0.6,\n",
       "                    0.7, 0.8],\n",
       "              mask=[False, False, False, False, False, False, False, False,\n",
       "                    False, False, False, False, False, False, False, False,\n",
       "                    False, False, False, False, False, False, False, False],\n",
       "        fill_value='?',\n",
       "             dtype=object),\n",
       " 'params': [{'colsample_bytree': 0.6, 'subsample': 0.3},\n",
       "  {'colsample_bytree': 0.6, 'subsample': 0.4},\n",
       "  {'colsample_bytree': 0.6, 'subsample': 0.5},\n",
       "  {'colsample_bytree': 0.6, 'subsample': 0.6},\n",
       "  {'colsample_bytree': 0.6, 'subsample': 0.7},\n",
       "  {'colsample_bytree': 0.6, 'subsample': 0.8},\n",
       "  {'colsample_bytree': 0.7, 'subsample': 0.3},\n",
       "  {'colsample_bytree': 0.7, 'subsample': 0.4},\n",
       "  {'colsample_bytree': 0.7, 'subsample': 0.5},\n",
       "  {'colsample_bytree': 0.7, 'subsample': 0.6},\n",
       "  {'colsample_bytree': 0.7, 'subsample': 0.7},\n",
       "  {'colsample_bytree': 0.7, 'subsample': 0.8},\n",
       "  {'colsample_bytree': 0.8, 'subsample': 0.3},\n",
       "  {'colsample_bytree': 0.8, 'subsample': 0.4},\n",
       "  {'colsample_bytree': 0.8, 'subsample': 0.5},\n",
       "  {'colsample_bytree': 0.8, 'subsample': 0.6},\n",
       "  {'colsample_bytree': 0.8, 'subsample': 0.7},\n",
       "  {'colsample_bytree': 0.8, 'subsample': 0.8},\n",
       "  {'colsample_bytree': 0.9, 'subsample': 0.3},\n",
       "  {'colsample_bytree': 0.9, 'subsample': 0.4},\n",
       "  {'colsample_bytree': 0.9, 'subsample': 0.5},\n",
       "  {'colsample_bytree': 0.9, 'subsample': 0.6},\n",
       "  {'colsample_bytree': 0.9, 'subsample': 0.7},\n",
       "  {'colsample_bytree': 0.9, 'subsample': 0.8}],\n",
       " 'split0_test_score': array([-0.58227915, -0.58132424, -0.58036107, -0.57870519, -0.57837703,\n",
       "        -0.57877547, -0.58178858, -0.5802808 , -0.57868504, -0.57784134,\n",
       "        -0.57702842, -0.57586339, -0.58241914, -0.57993607, -0.57861158,\n",
       "        -0.57830181, -0.57774709, -0.57767945, -0.5812908 , -0.57908519,\n",
       "        -0.57717265, -0.57678463, -0.57775823, -0.5773348 ]),\n",
       " 'split1_test_score': array([-0.58758867, -0.58426655, -0.58417391, -0.58334511, -0.5832636 ,\n",
       "        -0.5821803 , -0.58599319, -0.58465664, -0.58333766, -0.58274383,\n",
       "        -0.58174728, -0.58239991, -0.58570407, -0.58461467, -0.58451982,\n",
       "        -0.58338109, -0.58161215, -0.58222321, -0.58675975, -0.58394806,\n",
       "        -0.58282802, -0.58169637, -0.58241249, -0.57995434]),\n",
       " 'split2_test_score': array([-0.59023082, -0.58679343, -0.5861844 , -0.58577992, -0.58447289,\n",
       "        -0.58395917, -0.58811367, -0.58754119, -0.58543214, -0.58514919,\n",
       "        -0.58466783, -0.58367826, -0.58974916, -0.58801703, -0.58625832,\n",
       "        -0.58565227, -0.58457779, -0.5831931 , -0.58804326, -0.58628933,\n",
       "        -0.58538147, -0.5840933 , -0.58327806, -0.58232169]),\n",
       " 'split3_test_score': array([-0.59245226, -0.5907178 , -0.58861671, -0.58742809, -0.58724098,\n",
       "        -0.58599012, -0.59181273, -0.58826808, -0.58721288, -0.5874936 ,\n",
       "        -0.58759342, -0.58611928, -0.59182416, -0.589529  , -0.5889866 ,\n",
       "        -0.58658355, -0.58702562, -0.5856332 , -0.59139581, -0.58964533,\n",
       "        -0.58706857, -0.58835728, -0.58718407, -0.58612524]),\n",
       " 'split4_test_score': array([-0.59390752, -0.59161659, -0.58850885, -0.58807311, -0.58665652,\n",
       "        -0.58604079, -0.59307873, -0.5906577 , -0.58942637, -0.58923972,\n",
       "        -0.58789283, -0.58733104, -0.59339678, -0.59072595, -0.59159358,\n",
       "        -0.58857568, -0.58711575, -0.58676252, -0.5916726 , -0.58979353,\n",
       "        -0.58815408, -0.58667543, -0.58745394, -0.58549461]),\n",
       " 'mean_test_score': array([-0.5892914 , -0.58694344, -0.58556881, -0.58466608, -0.58400204,\n",
       "        -0.58338901, -0.58815708, -0.58628062, -0.58481854, -0.58449325,\n",
       "        -0.58378571, -0.58307812, -0.58861837, -0.58656429, -0.58599364,\n",
       "        -0.58449863, -0.58361547, -0.58309807, -0.58783221, -0.58575204,\n",
       "        -0.58412071, -0.58352121, -0.58361712, -0.58224594]),\n",
       " 'std_test_score': array([0.00410492, 0.003869  , 0.00307828, 0.00339866, 0.00316056,\n",
       "        0.00271546, 0.00407004, 0.00355896, 0.00366475, 0.00398165,\n",
       "        0.00404873, 0.00400519, 0.00403263, 0.00389751, 0.00440569,\n",
       "        0.0035199 , 0.00355692, 0.00316196, 0.00377975, 0.00398701,\n",
       "        0.00391136, 0.004059  , 0.00355911, 0.003316  ]),\n",
       " 'rank_test_score': array([24, 20, 15, 13,  9,  4, 22, 18, 14, 11,  8,  2, 23, 19, 17, 12,  6,\n",
       "         3, 21, 16, 10,  5,  7,  1]),\n",
       " 'split0_train_score': array([-0.51872528, -0.51671395, -0.51413384, -0.51247079, -0.51142742,\n",
       "        -0.51245171, -0.51592612, -0.51373168, -0.51025996, -0.50903417,\n",
       "        -0.50968984, -0.50930253, -0.51395588, -0.51120519, -0.50835777,\n",
       "        -0.5075294 , -0.50679998, -0.50620535, -0.51129937, -0.50753101,\n",
       "        -0.505256  , -0.50365375, -0.50282094, -0.50339304]),\n",
       " 'split1_train_score': array([-0.51908543, -0.51517769, -0.51311305, -0.5109219 , -0.51041569,\n",
       "        -0.51075866, -0.51535645, -0.5108025 , -0.50927552, -0.50804944,\n",
       "        -0.50696749, -0.50665277, -0.51271805, -0.50893373, -0.50672568,\n",
       "        -0.50459771, -0.50431542, -0.50520216, -0.50977036, -0.50617511,\n",
       "        -0.50478142, -0.50400581, -0.50217937, -0.50258909]),\n",
       " 'split2_train_score': array([-0.51796573, -0.51389597, -0.51200602, -0.50999878, -0.50993946,\n",
       "        -0.50936798, -0.51602101, -0.51212538, -0.50937965, -0.50860973,\n",
       "        -0.50819789, -0.50673727, -0.51190525, -0.50838357, -0.50617726,\n",
       "        -0.50531849, -0.50518513, -0.50467737, -0.50894827, -0.50580627,\n",
       "        -0.50352606, -0.50338358, -0.50249504, -0.50192849]),\n",
       " 'split3_train_score': array([-0.51904348, -0.51526168, -0.51196288, -0.51040182, -0.51001141,\n",
       "        -0.51071334, -0.51475513, -0.51045166, -0.50882803, -0.50813266,\n",
       "        -0.50712855, -0.50751702, -0.51290535, -0.5076473 , -0.50622675,\n",
       "        -0.50566911, -0.50424749, -0.50460505, -0.50969392, -0.50557766,\n",
       "        -0.50340299, -0.50209487, -0.50313331, -0.50303945]),\n",
       " 'split4_train_score': array([-0.51723723, -0.51396633, -0.51162597, -0.51072796, -0.50948776,\n",
       "        -0.5092706 , -0.51263345, -0.50897176, -0.50727263, -0.50734637,\n",
       "        -0.50640349, -0.50614749, -0.51109972, -0.50781719, -0.50456674,\n",
       "        -0.50347326, -0.50363796, -0.50387582, -0.50856232, -0.50633998,\n",
       "        -0.50286135, -0.50204968, -0.50208863, -0.50223818]),\n",
       " 'mean_train_score': array([-0.51841143, -0.51500312, -0.51256835, -0.51090425, -0.51025635,\n",
       "        -0.51051246, -0.51493843, -0.5112166 , -0.50900316, -0.50823447,\n",
       "        -0.50767745, -0.50727142, -0.51251685, -0.5087974 , -0.50641084,\n",
       "        -0.50531759, -0.5048372 , -0.50491315, -0.50965485, -0.50628601,\n",
       "        -0.50396557, -0.50303754, -0.50254346, -0.50263765]),\n",
       " 'std_train_score': array([0.00071129, 0.00103199, 0.00092934, 0.00084354, 0.00065543,\n",
       "        0.00115877, 0.00123845, 0.00160919, 0.00098193, 0.00056809,\n",
       "        0.0011618 , 0.00110607, 0.0009638 , 0.00128615, 0.00121481,\n",
       "        0.00133682, 0.00109834, 0.000772  , 0.00093938, 0.00067781,\n",
       "        0.00090109, 0.00081259, 0.00039159, 0.00052856])}"
      ]
     },
     "execution_count": 28,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "gsearch5_1.cv_results_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Best: -0.582246 using {'colsample_bytree': 0.9, 'subsample': 0.8}\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "c:\\python36\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('mean_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "c:\\python36\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('std_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "c:\\python36\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split0_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "c:\\python36\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split1_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "c:\\python36\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split2_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "c:\\python36\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split3_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "c:\\python36\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split4_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# summarize results\n",
    "print(\"Best: %f using %s\" % (gsearch5_1.best_score_, gsearch5_1.best_params_))\n",
    "test_means = gsearch5_1.cv_results_[ 'mean_test_score' ]\n",
    "test_stds = gsearch5_1.cv_results_[ 'std_test_score' ]\n",
    "train_means = gsearch5_1.cv_results_[ 'mean_train_score' ]\n",
    "train_stds = gsearch5_1.cv_results_[ 'std_train_score' ]\n",
    "\n",
    "pd.DataFrame(gsearch5_1.cv_results_).to_csv('my_preds_subsampleh_colsample_bytree_1.csv')\n",
    "\n",
    "# plot results\n",
    "test_scores = np.array(test_means).reshape(len(colsample_bytree), len(subsample))\n",
    "train_scores = np.array(train_means).reshape(len(colsample_bytree), len(subsample))\n",
    "\n",
    "for i, value in enumerate(colsample_bytree):\n",
    "    pyplot.plot(subsample, -test_scores[i], label= 'test_colsample_bytree:'   + str(value))\n",
    "#for i, value in enumerate(min_child_weight):\n",
    "#    pyplot.plot(max_depth, train_scores[i], label= 'train_min_child_weight:'   + str(value))\n",
    "    \n",
    "pyplot.legend()\n",
    "pyplot.xlabel( 'subsample' )                                                                                                      \n",
    "pyplot.ylabel( 'Log Loss' )\n",
    "pyplot.savefig( 'subsample_vs_colsample_bytree1.png' )"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "最优'colsample_bytree': 0.9, 'subsample': 0.8"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 2  使用模型进行测试"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "经过第一步参数调优得到的最优结果:\n",
    "    n_estimators=233\n",
    "    max_depth=5\n",
    "    min_child_weight=1\n",
    "    subsample=0.8\n",
    "    colsample_bytree=0.9\n",
    "    reg_alpha = 1.5\n",
    "    reg_lambda = 0.1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {},
   "outputs": [],
   "source": [
    "xgb = XGBClassifier(\n",
    "        learning_rate =0.1,\n",
    "        n_estimators=233,  #参数调整得到的n_estimators最优值\n",
    "        max_depth=5,    #调优得到的树的最大深度\n",
    "        min_child_weight=1,  #调优得到的min_child_weight\n",
    "        reg_alpha = 1.5,   #调优得到的\n",
    "        reg_lambda = 0.1, #调优得到的\n",
    "        subsample=0.8, #调优得到的\n",
    "        colsample_bytree=0.9, #调优得到的\n",
    "        objective= 'multi:softprob',\n",
    "        seed=3)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "分割数据来做训练集和测试集"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.model_selection import train_test_split\n",
    "X_train, X_test, y_train, y_test = train_test_split(X_train,y_train,test_size=0.2,random_state=4)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "训练"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "XGBClassifier(base_score=0.5, booster='gbtree', colsample_bylevel=1,\n",
       "       colsample_bytree=0.9, gamma=0, learning_rate=0.1, max_delta_step=0,\n",
       "       max_depth=5, min_child_weight=1, missing=None, n_estimators=233,\n",
       "       n_jobs=1, nthread=None, objective='multi:softprob', random_state=0,\n",
       "       reg_alpha=1.5, reg_lambda=0.1, scale_pos_weight=1, seed=3,\n",
       "       silent=True, subsample=0.8)"
      ]
     },
     "execution_count": 42,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "xgb.fit(X_train,y_train,eval_metric='mlogloss')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "预测"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "c:\\python36\\lib\\site-packages\\sklearn\\preprocessing\\label.py:151: DeprecationWarning: The truth value of an empty array is ambiguous. Returning False, but in future this will result in an error. Use `array.size > 0` to check that an array is not empty.\n",
      "  if diff:\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "array([2, 2, 2, ..., 2, 2, 2], dtype=int64)"
      ]
     },
     "execution_count": 43,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "y_predict=xgb.predict(X_test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "c:\\python36\\lib\\site-packages\\sklearn\\preprocessing\\label.py:151: DeprecationWarning: The truth value of an empty array is ambiguous. Returning False, but in future this will result in an error. Use `array.size > 0` to check that an array is not empty.\n",
      "  if diff:\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "0.730910472331265"
      ]
     },
     "execution_count": 46,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "xgb.score(X_test,y_test)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 3 生成结果文件"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "将上一步得到的模型用来对test数据进行预测"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "metadata": {},
   "outputs": [],
   "source": [
    "test_X=np.array(test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "c:\\python36\\lib\\site-packages\\sklearn\\preprocessing\\label.py:151: DeprecationWarning: The truth value of an empty array is ambiguous. Returning False, but in future this will result in an error. Use `array.size > 0` to check that an array is not empty.\n",
      "  if diff:\n"
     ]
    }
   ],
   "source": [
    "test_y=xgb.predict(test_X)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 55,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([2, 1, 2, ..., 2, 1, 2], dtype=int64)"
      ]
     },
     "execution_count": 55,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "test_y"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "将预测结果保存到文件中"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 58,
   "metadata": {},
   "outputs": [],
   "source": [
    "pd.DataFrame(test_X,test_y).to_csv('RentListingInquries_test_result.csv')"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
